# -*- coding: utf-8 -*-
# @Time  : 2021/11/19 16:29
# @Author: masonsxu
# @File  : load_logger.py
# @Desc  : 加载日志配置文件，将日志文件进行归档分类

import os
from pathlib import Path
from datetime import datetime
from logging.config import dictConfig


def delete_top_log_file(log_dir_path: Path, backupCount: int, startStr: str):
    """删除多余日志文件

    Args:
        log_dir_path (Path): 日志文件存放路径
        backupCount (int): 日志文件存储上限
        startStr (str): 日志文件前缀
    """
    log_file_list = []
    for log_file_path in log_dir_path.glob(f'{startStr}*'):
        log_file_list.append(log_file_path)
        if len(log_file_list) >= backupCount:
            sorted(log_file_list, reverse=False).pop(0).unlink()


def load_log_config(log_file_name: str, log_config: dict):
    """加载logging的配置，重新生成日志保存的文件

    Args:
        log_file_name (str): 保存日志文件的名称（前缀）
        log_config (dict): 日志配置内容
    """
    # 获取当前文件所在目录的绝对路径
    current_path = os.path.abspath(os.path.dirname(__file__))
    # 以utils为分隔符分割绝对路径，取第一个值
    project_path = current_path.split("utils")[0]
    # 日志文件存放路径
    log_dir_path = Path(f"{project_path}/log")
    if not log_dir_path.exists():
        log_dir_path.mkdir()

    # 更新LOGGING_CONFIG_DICT
    LOG_FILE_PATH = (
        f"{log_dir_path}/{log_file_name}_{datetime.now().strftime('%Y%m%d')}.log"
    )

    # 日志文件的数量总数限制
    log_config_handlers = log_config['handlers']
    (handler,) = log_config_handlers
    backupCount = log_config_handlers[handler]['backupCount']

    delete_top_log_file(log_dir_path, backupCount, log_file_name)

    log_config_handlers[handler]['filename'] = LOG_FILE_PATH
    dictConfig(log_config)
